<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>22-简单+复杂数据类型</title>
  <script>
    // 1. 需要注意null是属于简单数据类型的，但是因为程序设计时的bug所以返回的是object
    console.log(typeof null); // object

    // 2. 简单数据类型传参
    function fn(x) {
      x++;
      console.log(x); // 11
    }
    var a = 10;
    fn(a);
    console.log(a); // 10
    if (false) {
      // a. 解析过程
      // (1) 进行变量(函数)提升 赋值
      // 在栈中开辟一块新空间存储a变量
      var a;
      function fn(x) {
        // 将传递过来的x加1，这时候就是11，不过不是a变量空间的，而是重新开辟一个空间进行存储
        x++;
        console.log(x); // 11
      }
      // 将a变量空间中的填上10
      a = 10;
      // (2) 函数调用
      fn(a);
    }

    // 3. 复杂数据类型传参
    function Person(name) {
      this.name = name;
    }

    function f1(x) { // x = p (将p变量中存储的内存地址赋值给x）
      console.log(x.name); // 刘德华 修改x指向地址中对象的name(因为x与p存储的内存地址是同一个，所以修改x对象后，p也会进行相对应的改变)
      x.name = '张学友';
      console.log(x.name); // 张学友
    }

    var p = new Person('刘德华');
    console.log(p.name); // 刘德华
    f1(p);               // 调用函数
    console.log(p.name); // 张学友

  </script>
</head>

<body>

</body>

</html>